package timetables;

import info.SpecialSchedule;

import java.util.ArrayList;

public class ExamTable {
	String startDay;		// 시작 날짜
	String endDay;			// 끝나는 날짜
	
	//boolean valid = false;		// 이거 원래 뭐였더라...
	
	public ArrayList<TimeDay> examDay = new ArrayList<TimeDay>();	// 시험 시간표
	
	// 시험치는 날에서 5일간의 일정을 추가
	public void addDay(String startDay)
	{
		// 시작하는 날은 우선 정수로 받고... 
		int firstDay = Integer.parseInt(startDay);
		
		// 5일간 일정 추가
		examDay.add(new TimeDay());
		examDay.add(new TimeDay());
		examDay.add(new TimeDay());
		examDay.add(new TimeDay());
		examDay.add(new TimeDay());
		
		// 날짜 입력
		for(int i = 0; i < 5; i++)
		{
			examDay.get(i).setDate(Integer.toString(firstDay+i));
		}

	}
	
	// 날짜를 가지고 인덱스 얻어오기
	public int getIndexOfDay(String day)
	{
		int result = -1;
		
		for(int i = 0; i < 5; i++)
		{
			if(examDay.get(i).getDate().equals(day))
			{
				result = i;
				break;
			}
		}
		
		return result;
	}
	
	// 특별 스케줄을 시험 시간표에 추가함
	public void setSpecialSchedule(SpecialSchedule temp)
	{
		int startDay, endDay;
		String startTime = null, endTime = null;
		int i, j;
		boolean addSchedule = false;
		
		// 시험 시간표에 추가
		// 시작하는 날, 시작하는 시간에서 끝나는 날, 끝나는 시간까지 채우기
		startDay = getIndexOfDay(temp.getStartDate());
		endDay = getIndexOfDay(temp.getEndDate());
		
		if(startDay != -1 && endDay != -1)
		{
			// 시작하는 시간, 끝나는 시간 얻기
			startTime = temp.getStartTime();
			endTime = temp.getEndTime();
		}
		
		// 각각의 timeslot을 채우기
		if (!startTime.equals(null) && !endTime.equals(null))
		{
			for( i = startDay; i <= endDay ; i++ )
			{
				// 하루 받아오고
				TimeDay oneDay = examDay.get(startDay);
				for(j = 0; j < 26; j++)
				{
					// 시작 시점이 오면 true로 만들고
					if(oneDay.getSingleTimeSlot(j).getName().equals(startTime))
						addSchedule = true;
					// 끝나는 시점까지 오면 이 method에서 빠져 나감
					else if (i == endDay && oneDay.getSingleTimeSlot(j).getName().equals(endTime))
						return;
					
					// true면 일정 삽입
					if(addSchedule)
					{
						TimeSlot ts = oneDay.getSingleTimeSlot(j);
						ts.setAvailExam(false);							// 시험 불가능으로 지정
						ts.setExtraInfo(temp.getName());				// 행사 내용 지정
					}
				}
			}
		}
	}
}
